// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.List;
// import java.util.Map;
#pragma once
#include <map>
#include <string>
#include "Object.h"

class SQLObject
    : virtual public Object
{
public:
  // SETCALSS(SQLObject);
  // static string_ptr SQLObject::class_ = std::make_shared<std::string>("SQLObject");
  GETCALSS(SQLObject);
  SHAREDOBJECT(SQLObject);

  virtual void accept(SQLASTVisitor_ptr visitor) {};

  virtual SQLObject_ptr clone() {};

  virtual SQLObject_ptr getParent() {};

  virtual void setParent(SQLObject_ptr parent) {};

  virtual std::shared_ptr<std::map<std::string, Object_ptr>> getAttributes() {};

  virtual bool containsAttribute(string_ptr name) {};

  virtual Object_ptr getAttribute(std::string name) {};

  virtual void putAttribute(std::string name, Object_ptr value) {};

  virtual std::shared_ptr<std::map<std::string, Object_ptr>> getAttributesDirect() {};

  virtual void output(std::stringstream *buf) {};

  //  virtual  void output(Appendable buf);

  virtual void addBeforeComment(string_ptr comment) {};

  virtual void addBeforeComment(string_list_ptr comments) {};

  virtual string_list_ptr getBeforeCommentsDirect() {};

  virtual void addAfterComment(string_ptr comment) {};

  virtual void addAfterComment(string_list_ptr comments) {};

  virtual string_list_ptr getAfterCommentsDirect() {};

  virtual bool hasBeforeComment() {};

  virtual bool hasAfterComment() {};
};
